﻿#include <iostream>
#include <string>
#include <future>
#include <thread>
#include <mutex>
using  namespace  std;

int mythread()
{
	cout << "mythread start," << "thread_id:" << std::this_thread::get_id << endl;
	//sleep 5s
	std::chrono::milliseconds dura(5000);
	std::this_thread::sleep_for(dura);
	cout << "mythread over," << "thread_id:" << std::this_thread::get_id << endl;
	return 5;
}
int main() {

	//一 std::async std::future 创建后台任务并返回值
	//希望线程返回一个结果
	//std::async 是个函数模板，用来启动一个异步任务，然后返回一个std::fulture对象，std::fulture是个类模板
	//什么叫启动一个异步任务：自动创建一个线程并开始执行对应的线入口函数，它返回一个std::fulture对象
	//std::fulture对象里边就含有线程入口函数所返回的结果
	//可以通过future对象的成员函数get()得到返回值
	//fulture 将来，也称std::fulutre为访问异步操作结果的机制，即这个结果没办法马上拿到，但在线程执行完毕的事后就可以拿到结果

	cout << "main," << "thread_id" << std::this_thread::get_id << endl;
	//自动创建线程 并开始执行  绑定关系；
	std::future<int> res = std::async(mythread);

	cout << "continue...." << endl;
	int def = 0;
	//线程还没执行到返回值那一步  如果还没返回 则卡住等待线程执行完并得到结果
	//cout << res.get() << endl;
	cout << "all over" << endl;
	return 0;

}

